#include<stdio.h>
#include<unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <signal.h>

#define PATHNAME "/hmoe/china"
#define PRO_ID 2515
#define SIZE 1024

//自定义一个信号处理函数
void myhander(int sig)
{
    printf("收到了信号:%d\n", sig);
}

int main()
{
     signal(SIGALRM, myhander);
    //先向内核申请一个IPC的key
    key_t key = ftok(PATHNAME,PRO_ID);
    if(key == -1)
    {
        perror("file to key error");
        return -1;
    }
    //利用key创建IPC(共享内存对象)
    int smdit = shmget(key, SIZE, IPC_CREAT | 0664);
    if(smdit == -1)
    {
        perror("smdit error");
        return -1;
    }
    //映射
    int *p = shmat(smdit,NULL,0);
    if(p == NULL)
    {
        perror("shmat fial");
        return -1;
    }
    //初始化
    *p = 0;
    //使用fork创建一个子进程
    pid_t pid = fork();
    if(pid > 0)
    {
        int i = 100000;
        //lock
        while(i--)
        {
            (*p)++;
        }
        //访问完毕
        wait(NULL);
        printf("父进程 *p = %d\n",*p);
    }
    else if(pid = 0)
    {
       int i = 100000;
        //lock
        while(i--)
        {
            (*p)++;
        }
    }
    
		
    //解映射
    shmdt(p);

}